class_name MonsterHitHandler
extends HComponent

## Monster被击中处理组件
## 负责处理被投掷物击中的逻辑，触发减速效果
## 遵循单一职责原则：只处理被击中的响应逻辑

# 引用其他组件
var monster_ai: MonsterAI = null

## 组件初始化
func _ready():
	_find_monster_ai()
	_setup_collision_detection()

## 查找MonsterAI组件
func _find_monster_ai():
	if not attach_node:
		print("警告：MonsterHitHandler未绑定到节点")
		return
	
	# 在父节点及其子节点中查找MonsterAI
	monster_ai = HNodeUtilties.get_node_by_type(attach_node, MonsterAI)
	
	if not monster_ai:
		print("警告：未找到MonsterAI组件")

## 设置碰撞检测
func _setup_collision_detection():
	if not attach_node or not attach_node is RigidBody3D:
		print("警告：MonsterHitHandler需要绑定到RigidBody3D节点")
		return
	
	var rigid_body = attach_node as RigidBody3D
	
	# 连接碰撞信号
	if not rigid_body.body_entered.is_connected(_on_body_entered):
		rigid_body.body_entered.connect(_on_body_entered)

## 处理物体进入碰撞
## @param body: 进入碰撞的物体
func _on_body_entered(body: Node):
	if _is_projectile(body):
		_handle_projectile_hit(body)

## 判断是否为投掷物
## @param body: 碰撞的物体
## @return bool: 是否为投掷物
func _is_projectile(body: Node) -> bool:
	# 检查是否为Projectile类或其子类
	return body is Projectile

## 处理投掷物击中
## @param projectile: 投掷物节点
func _handle_projectile_hit(projectile: Node):
	print("Monster被投掷物击中：", projectile.name)
	
	# 应用减速效果
	if monster_ai:
		monster_ai.apply_slow_effect()
	
	# 可以在这里添加其他效果，如音效、粒子效果等
	_play_hit_effects()

## 播放被击中的效果
func _play_hit_effects():
	# 这里可以添加音效、粒子效果等
	# 目前只打印日志
	print("播放Monster被击中效果")
